<?php
/**
 * Basics class met een extend Class wat losse onderdelen rondom:
 * const, static, public, private, protected & parent/self
 *
 * @author Antwan van der Mooren
 */

class Basics
{
    public $getal;
	private $woord;
	protected $boek;

	const GRASCOLOR		= "groen";
	const CLOUDCOLOR	= "blauw";

	public function  __construct()
	{
		$this->getal	= 5;
		$this->woord	= "Koek";
		$this->boek		= "Zend Certification";
	}

	private function getGetal($nieuwGetal = false)
	{
		$getal = (!is_null($nieuwGetal) ? $nieuwGetal : $this->getal);
		return $getal;
	}

	protected function getCloudsColor()
	{
		return self::CLOUDCOLOR;
	}

	public function  __destruct()
	{
		print "<br/>".__METHOD__." is killing me :-(";
	}
}

class ExtendBasics extends Basics
{
	private $nieuwGetal;

	public function  __construct()
	{
		parent::__construct();
		$this->nieuwGetal = 3;
	}
	
	public function getMyStuff()
	{
		$myStuff	= array();
		$myStuff[]	= $this->getBoek();
		$myStuff[]	= $this->getCloudsColor();
		$myStuff[]	= $this->getGrassColor();
		
		return implode("<br/>", $myStuff);
	}

	protected final function getBoek()
	{
		return $this->boek;
	}

	public static function getGrassColor()
	{
		return parent::GRASCOLOR;
	}
}

//Errors aan
error_reporting(EA_ALL);

//Aanmaken 2 classes
$basics			= new Basics();
$extendsBasics	= new ExtendBasics();

//De enige waarde die public opgevraagd kan worden
echo $basics->getal . "<br/>";

//Constante die enkel static opgehaald kan worden
echo Basics::CLOUDCOLOR . "<br/>";

//Opnieuw printen van getal zal niet meer lukken door eerder dan "natuurlijk" aanroepen destruct
//Bij het uitcommenten van unset wordt $basics pas onderaan het script gedestruct
unset($basics);
echo $basics->getal . "<br/>";

//Buiten de extenden waarde 'getal' is onderstaande functie de enige om public op te vragen
//getMyStuff is een verzameling van waarden uit de 2 classes
echo $extendsBasics->getMyStuff() . "<br/>";

//Extendsbasic heeft een static functie die opgeroepen kan worden
echo ExtendBasics::getGrassColor() . "<br/>";

//Reflectionis zeer geavanceerd om je classes in te zien
$reflectClass = new ReflectionClass("ExtendBasics");
echo "<pre>";
print_r($reflectClass->getConstants());
echo "</pre>";
?>
